//
//  main.m
//  02-ClassAndObject
//
//  Created by dllo on 16/7/5.
//  Copyright © 2016年 daming. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
    // 1.快捷键
    // commnd + 0 为开/收左边栏
    // commnd + option(Alt) + 0 开/收右边栏
    // commnd + shift + Y 开/收下边栏
    // commnd + z 撤销
    // commnd + shift + z 反撤销
    // commnd + n 新建一个类
    // commnd + shift + n 新建一个工程
    // Ctrl + ←/→ 切换电脑界面
    // Ctrl + ↑/↓ 切换电脑桌面上的窗口
    
    // 2.移动光标
    // commnd + ← 移动当前行光标到最左边
    // commnd + → 移动当前行光标到最右边
    // commnd + ↑ 移动到所有行的起始位置
    // commnd + ↓ 移动到所有行的最后一行的起始位置
        
    // 3.选中文字
    // shift + ←/→ 选中向左/右的一个文字
    // shift + ↑/↓ 选中从当前光标位置开始,选中向上/向下一行对应的位置
    // commnd + shift + ←/→ 选中从当前光标位置开始左/右边所有的文字
    // commnd + shift + ↑/↓ 选中从当前光标位置开始上/下边所有的文字
    
    // 1.类和对象
    // 类: 一个具有相同特征和行为的事物抽象集合
    // 对象: 类的实例, 也称作是类的实现
    // 面向对象的思想, 万物皆是对象
    // 面向对象语言是面向对象思想的具体体现
    // OOP: 面向对象编程
    // OOD: 面向对象设计
    // 面向对象的三大特征(特性): 封装 继承 多态 他们的目的是提高代码的复用
    
    // 2.Objective-C(OC)
    // OC与C语言的区别
    // OC属于C语言的扩展
    // OC有类的概念
    // OC中声明属性和方法在 .h文件中
    // OC中具体实现在 .m文件中
    // .mm文件 是C++的文件, 在这个文件里可以编写C++代码
    
    // OC中的根类 NSObject
    
    // 3.创建OC的实例
    // 1> 消息语法 [objc doSomething];
    // 想objc对象发送一个doSomething的方法, 让他去调用
    // 类方法的调用(由类名去调用+方法)
//    NSObject *objc = [NSObject alloc];// 开辟内存空间
    // 实例方法的调用
//    NSObject *newObjec = [objc init];//
    // 创建一个Person类对象
    Person *per = [[Person alloc]init];
    // 公开的成员可以直接通过 ->赋值 ->取值
    per -> _age = 10;
    NSLog(@"%ld", per->_age);
    // 受保护的成员不能通过->去访问
    // id 与 instancetype
    // instancetype 在作为参数返回值的时候与id是一样的,系统编译器会把id类型转成instancetype(即当前对象类型)
    // id可以作为变量类型去使用,但instancetype不可以
//    id object = [[NSObject alloc] init];
    
        /** 创建两个分数 */
        Fraction *frac1 = [Fraction fractionNumerator:2 denominator:5];
        Fraction *frac2 = [Fraction fractionNumerator:1 denominator:6];
        Fraction *frac3 = [Fraction fractionNumerator:9 denominator:6];
        /** 对两个分数进行加减乘除 */
        [frac1 addOfFraction:frac2];
        [frac1 subtractOfFraction:frac2];
        [frac1 multiplyOfFraction:frac2];
        [frac1 divideOfFraction:frac2];
        /** 约分 */
        [frac3 reductionOfFraction];
        NSLog(@"约分后 = %ld/%ld", frac3.numerator, frac3.denominator);
        /** 比较大小 */
        [frac1 compareFraction:frac2];
    
    }
    return 0;
}
